Memori Lokal, Variabel & Tipe Data Dasar
Dalam persoalan dasar OSN-K, kamu diharuskan memiliki insting membaca alur program layaknya sebuah *compiler* untuk memperkirakan nilai akhir memori (Tracing memory).
👩🏫 Secara Formal:
Variabel adalah lokasi memori yang diberi nama untuk menyimpan data. Dalam
bahasa C++, variabel beroperasi secara primitif: nilai lama akan ditimpa
(overwrite) seutuhnya ketika terjadi *assignment* baru. Status memori harus dilacak
baris demi baris secara skuensial. Awas jebakan tipe int, e.g.
5 / 2 = 2 bukan 2.5.
Analogi Jaman Now
"Bayangin variabel itu kayak loker kecil di stasiun yang cuma muat 1 barang. Kalau loker
X awalnya berisi 'Sepatu',
terus kamu paksa masukin 'Tas' kesana, maka si sepatu itu langsung dibuang
dan hilang selamanya. Komputer gak punya history/riwayat, dia cuma peduli barang terakhir."
Visualisasi Tracing Variabel
Lab Mandiri: Coba Tracing Sendiri!
Hitung manual nilai akhir X dan Y dari logika kode di bawah ini layaknya soal OSN Kabupaten.
int x = 10;
int y = 5;
x = x + y;
y = x - y;
x = x - y;
x = x * 2;
Logika Percabangan & If-Else
Menjalankan blok kode kondisional berbekal nilai operator perbandingan logika Boolean sejati.
👩🏫 Secara Formal:
Blok pernyataan IF dapat membelokkan eksekusi alur logika selagi kondisinya
true. Keunikan dari C++ adalah Short-Circuit
Evaluation. Jika ada (A && B), dan
A sudah false, maka sistem tidak akan mengecek
lagi sebelah kanannya karena otomatis pasti false.
Analogi Jaman Now
"Fitur logik && (AND) layaknya syarat ngedate: (Baik && Anak_Sultan). Kalo ternyata aslinya dia
Baik = False, kamu gaperlu lagi susah-susah ngecek apakah dia anak sultan atau
bukan, relasinya otomatis gagal saat itu juga dan langsung di Skip!"
Visualisasi Short-Circuit Evaluation
1. Sistem mengecek sisi Kiri: (5 > 2). Benar! -> TRUE.
2. Karena baru dapat TRUE (untuk AND), sistem lanjut ke Kanan: (10 != 10). Salah! -> FALSE.
1. Sistem mengecek Kiri: (!false). Itu TRUE!
2. Karena evaluasi OR (||) hanya butuh satu TRUE, dia otomatis berhenti.
Lab OSN: Truth Checker
Evaluasi nilai kebenaran akhir dari kumpulan percabangan memusingkan yang rawan menjebak peserta Olimpiade di bawah ini:
(5 > 2) && (10 != 10)
!false || (3 <= 1)
Paradoks Loop (Perulangan)
Mengukur kemampuan fundamental programmer untuk memprediksi seberapa banyak eksekusi repetitif dievaluasi.
👩🏫 Secara Formal:
Mekanisme for loop selalu mengeksekusi urutan mutlak ini: 1) Initialisasi
i=0 hanya sekali diawal, 2) Evaluasi Syarat boolean (Lanjut/Stop), 3)
Pengeksekusian Baris di dalam blok kurung kurawal, 4) Perubahan modifier seperti
i++.
Analogi Jaman Now
"Mikirin For loop tuh layaknya settingan mesin Fotokopi. i < 10 (Syarat berhenti) adalah jatah maksimum batas
lembar fotokopi yang diizinkan. Kalau modifier-nya dihilangkan oleh Hacker OSN
(Infinity Loop), mesinnya bakal jalan non-stop terus-menerus sampe tintanya hangus!"
Visualisasi Eksekusi Loop ( i & j )
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= i; j++) {
print("Bintang");
}
}
| Siklus | Luar (i) | Dalam (j) | Eksekusi |
|---|---|---|---|
| 1 | 1 | 1 | Print "Bintang" ke-1 |
| 2 | 2 | 1 | Print "Bintang" ke-2 |
| 3 | 2 | 2 | Print "Bintang" ke-3 |
| 4 | 3 | 1 | Print "Bintang" ke-4 |
| 5 | 3 | 2 | Print "Bintang" ke-5 |
| 6 | 3 | 3 | Print "Bintang" ke-6 |
Lab OSN: Prediksi Iterasi Loop Bersarang
Berapa kali persisnya sistem akan mencetak string "Bintang" pada potongan C++ ini?
int count = 0;
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= i; j++) {
print("Bintang");
count++;
}
}
Konsep Fungsi & Scope Variabel
Cara memisahkan blok logika dalam sebuah ruang tertutup yang memiliki memori privat sendiri (*Scope/Scope Boundary*).
👩🏫 Secara Formal:
Dalam C++, Fungsi adalah sub-program yang memiliki lokalisasi memori (Local Scope). Variabel
yang dibuat di dalam fungsi akan hancur/dibebaskan ketika fungsi berakhir. Pemanggilan argumen
default dilakukan dengan Pass-by-Value (Nilai dikopi, asli tidak berubah),
sedangkan menggunakan simbol & (Ampersand) disebut
Pass-by-Reference (Alias ke memori asli, aslinya ikut berubah).
Analogi Jaman Now
"Pass by Value itu ibarat ada teman nitip catetan tugas ke kamu. Kamu fotokopi catetannya, terus kamu coret-coret kopiannya. Catetan aslinya tetap aman, kan? Nah, kalau Pass by Reference, kamu minjem buku aslinya langsung. Kalau kamu coret, ya buku aslinya ikut rusak karena itu satu buku yang sama!"
Visualisasi Copy vs Reference
void addFive(int x) { // Pass by Value
x = x + 5;
}
void addFiveRef(int &y) { // Pass by Reference
y = y + 5;
}
// Simulasi Main
int a = 10;
int b = 10;
addFive(a); // A tetap 10
addFiveRef(b); // B jadi 15
Pass By Value
(Clone
Memory)
Perubahan X = 15 tidak mengubah A (Tetap 10)
Pass
By Reference
(Memory
Mapping)
Perubahan Y = 15 **LANGSUNG** merubah B = 15
Lab OSN: Tracing Amperstand Teka-teki
Tebak output kode C++ dengan pemanggilan by-Reference ini!
void testFunc(int x, int &y) {
x = x + 5;
y = y + 5;
}
int main() {
int a = 10;
int b = 10;
testFunc(a, b);
// Berapakah nilai a dan b sekarang?
}